package org.jeecg.magic.interceptor;

import com.yl.utils.UserContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.system.vo.LoginUser;
import org.springframework.stereotype.Component;
import org.ssssssss.magicapi.core.context.MagicUser;
import org.ssssssss.magicapi.core.interceptor.Authorization;
import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
import org.ssssssss.magicapi.core.model.Group;
import org.ssssssss.magicapi.core.model.MagicEntity;
import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest;

/**
 * 自定义操作鉴权
 *
 * @author YL
 * @date 2024-10-12 02:11
 */
@Slf4j
@Component  //注入到Spring容器中
public class MagicAuthorizationInterceptor implements AuthorizationInterceptor {

    // 自定义登录的逻辑请参考上一篇文章

    // 对于登录走自身应用的，MagicUser 对象会为空，此时需要自己获取当前登录的用户信息。

    /**
     * 配置是否需要登录
     */
    @Override
    public boolean requireLogin() {
        return false; // 配置为不需要登录（走应用自身的登录）
    }

    /**
     * 是否拥有页面按钮的权限
     */
    @Override
    public boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization) {
        // Authorization.SAVE 保存
        // Authorization.DELETE 删除
        // Authorization.VIEW 查询
        // Authorization.LOCK 锁定
        // Authorization.UNLOCK 解锁
        // Authorization.DOWNLOAD 导出
        // Authorization.UPLOAD 上传
        // Authorization.PUSH 推送

        return isSuperAdmin(request);
    }

    /**
     * 是否拥有对该接口的增删改权限
     * 此方法可以不重写，则走默认的 boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization) 方法
     */
    @Override
    public boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization, MagicEntity entity) {
        // Authorization.SAVE 保存
        // Authorization.DELETE 删除
        // Authorization.VIEW 查询
        // Authorization.LOCK 锁定
        // Authorization.UNLOCK 解锁
        // 自行写逻辑判断是否拥有如果有，则返回true，反之为false
        return isSuperAdmin(request);
    }

    /**
     * 是否拥有对该分组的增删改权限
     * 此方法可以不重写，则走默认的 boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization) 方法
     */
    @Override
    public boolean allowVisit(MagicUser magicUser, MagicHttpServletRequest request, Authorization authorization, Group group) {
        // Authorization.SAVE 保存
        // Authorization.DELETE 删除
        // Authorization.VIEW 查询
        // 自行写逻辑判断是否拥有如果有，则返回true，反之为false
        return isSuperAdmin(request);
    }

    /**
     * 是否超级管理员
     *
     * @return boolean
     */
    public static boolean isSuperAdmin(MagicHttpServletRequest request) {
        String token = request.getHeader("X-Access-Token");
        String username = JwtUtil.getUsername(token);
        System.out.println("================================");
        System.out.println(UserContext.getCurrentUser());
        if ("admin".equals(username)) {
            return true;
        }
        return false;
    }

}
